
#pragma region CLASS_DESCRIPTION
/*
* =========================================================================================

* AUTHOR:      Physics Core Team (Ron Ram, Matt Hoyes, Randy Prieto, Kris Greene)
* DATE:        01/17/2012
*
* CLASS:       Vector2 Class (Vector2.h)
*
* DESCRIPTION:
* ---------------------------------------------------------------------------------------
*	All 2D shapes can use Vector2 to represent data E.g.: Position, Direction, Size,etc
* =========================================================================================
*/
#pragma endregion


#ifndef VECTOR2_H_
#define VECTOR2_H_

namespace Physics
{
	class Vector2
	{
	private:
		//DATA MEMBERS...
		float x, y;

	public:
		//---------- CONSTRUCTORS ----------
		Vector2(): x(0), y(0) {}						//C001: Inline Default Constructor
		Vector2(float X, float Y): x(X), y(Y) {} 		//C002: Inline Overloaded Constructor
		Vector2(const Vector2 &value);					//C003: Copy Constructor

		virtual ~Vector2() { }							//C004: EMPTY Virtual Destructor, in case this class is inherited later


		//---------- PROPERTIES ----------
		void setX(const float &value);					//M001: Setter X-value
		float getX() const;								//M002: Getter X-value

		void setY(const float &value);					//M003: Setter Y-value
		float getY() const;								//M004: Getter Y-value

		void setXY(const float &X, const float &Y);		//M005: Setter XY-value
		void setXY(const Vector2 &value);				//M006: Setter XY-value
		const Vector2& getXY() const;					//M007: Getter XY-value
		
		//---------- OVERLOADED OPERATORS ----------
		const Vector2 operator+(const Vector2 &value);	//M008: 
		const Vector2 operator-(const Vector2 &value);	//M009: 
		const Vector2 operator*(const Vector2 &value);	//M010: 
		const Vector2& operator=(const Vector2 &rhs);	//M011: Assignment Operator
		bool operator==(const Vector2 &value);			//M012:
		//subscript ( [] ) operator for arrays			//M013: Not needed, this class does not have any arrays....
		
		float findDistance(Vector2 const &otherVec);	//M014: Distance Method

		float dotProduct(Vector2 const &vec);			//M015: Get Dot Product

		void normalize();								//M016: Normalize the vector

		float magnitude();								//M017: Get length/magnitude of the vector
		
		//---------- HELPER METHODS ----------
		const Vector2 zero() const;						//M017: Helper Method, Return ZERO-value

		
	};
} /* NAMESPACE */

#endif
